Our original architecture did not have any platform separation in the browser window and tab layer. WebContents contained a RenderViewHost, and that implemented a great deal of both logic and view-related functionality.
We want to make this architecture cleaner and separate out the view from the cross-platform logic. This document tracks the progress of this work.
We have split out a variety of OS-specific views from WebContents. On Windows, the objects look like this:
The view-related calls from RenderViewHost to WebContentsView are removed from WebContents completely by using a separate delegate. When RenderViewHost needs to make a view-related call, it asks its delegate (through the RenderViewHostDelegate interface) for the "View" delegate. This is implemented by the WebContentsView.