| # What is content/browser/renderer_host? |
| |
| This directory contains code that can be loosely categorized as "handling the |
| renderer," covering a wide range of topics (navigation, compositing, input, |
| etc). Many of the classes represent a browser-side version of a renderer |
| concept (e.g., RenderFrameHostImpl is the browser-side equivalent of |
| RenderFrameImpl). Refer to the class-level comments on how each class relates |
| to or interacts with the renderer. |
| |
| Note that many of the key classes here are defined in `content/public` and |
| exposed to `//content` embedders, with implementations living in |
| `content/browser/renderer_host`. |
| |
| ## Rough Categories |
| |
| A non-exhaustive list of rough categories and descriptions for the code within |
| `renderer_host` is below. When adding something that falls into the |
| miscellaneous category, consider if it belongs in a separate directory, either |
| under `content/browser/` or under `content/browser/renderer_host`. |
| |
| ### Browser-side representation of documents and frame-tree-related renderer-side objects |
| Allows the browser-side code to represent document and frame-tree related |
| concepts, and communicate with the renderer-side. |
| |
| Some important classes include: |
| - **FrameTree** and **FrameTreeNode**: Represents the frames in the frame tree |
| of a page. |
| - **RenderFrameHost**: Roughly represents a document within a frame, although |
| it does not (yet) change for every new document. |
| - **RenderFrameProxyHost**: A placeholder for a frame in other |
| SiteInstanceGroups and renderer processes. |
| - **RenderViewHost**: Represents a page within a given SiteInstanceGroup. |
| - **RenderWidgetHost**: A group of contiguous same-SiteInstanceGroup frames |
| that can paint or handle input events as a single unit. |
| |
| For diagrams and explanations of how those classes fit with each other, see also |
| [this documentation](https://www.chromium.org/developers/design-documents/oop-iframes/) |
| and [docs/frame_trees.md](https://chromium.googlesource.com/chromium/src/+/main/docs/frame_trees.md). |
| |
| ### Connections between browser and renderer/GPU processes, process-related code |
| Represents child processes (e.g., renderers, GPU, etc) and their connection to |
| the browser process. |
| |
| An important class in this category is **RenderProcessHost**, which represents |
| the browser side of the browser <-> renderer communication channel. There will |
| be one RenderProcessHost per renderer process. |
| |
| ### Navigation |
| Navigation handling code, coordinating the browser & renderer from navigation |
| start to finish. Also keeps track of the session history entries created by the |
| committed navigations. |
| |
| Some important classes include: |
| - **NavigationRequest**: Represents a navigation attempt, and tracks information |
| related to it. |
| - **NavigationController**: Manages the joint session history for a frame tree. |
| - **NavigationEntry** and **FrameNavigationEntry**: Represents joint session |
| history items (for pages), made up of a tree of session history items (for |
| frames). |
| |
| See also [docs/navigation.md](https://chromium.googlesource.com/chromium/src/+/main/docs/navigation.md) |
| and [docs/session_history.md](https://chromium.googlesource.com/chromium/src/+/main/docs/session_history.md). |
| |
| ### Compositing, input, display |
| Coordinates handling of input, display, and compositing between the browser, |
| renderer, and GPU processes. |
| |
| Some important classes include: |
| - **RenderWidgetHostView\***: The browser owned object that mediates the |
| blink::VisualProperties to be used by an embedded Renderer. |
| - **DelegatedFrameHost**: Used by RenderWidgetHostView to control which |
| viz::Surface of an embedded Renderer the GPU process will display |
| EmbeddedFrameSinkImpl: The browser owned object that mediates between an |
| embedded Renderer and the GPU process. Allowing for the creation of |
| Renderer-GPU Mojo connections. |
| - **viz::HostFrameSinkManager**: The browser owned object, accessed via |
| GetHostFrameSinkManager, that controls the Browser-GPU Mojo connection. Used to |
| establish future connections for Renderers, as well as to control what |
| viz::Surfaces to display. |
| |
| ### Misc features that heavily interact with the renderer |
| Examples: loading/networking, file/storage, plugins, UI, fonts, media, |
| accessibility. |
| |
| ## Layering restriction with WebContents |
| Code in this directory can't call up to the WebContents "layer," except through |
| delegate interfaces (e.g. RenderFrameHostDelegate). This is to separate out |
| code that deals with the renderer process and code that deals with the tab. |
| This is enforced by the [DEPS](https://source.chromium.org/chromium/chromium/src/+/main:content/browser/renderer_host/DEPS). |