Movatterモバイル変換


[0]ホーム

URL:


Google Git
Sign in
chromium /chromium /src /refs/heads/main /. /content
tree: 6519defd5263fe6bf5255b2c5ca6b4391499575c [path history][tgz]
  1. app/
  2. app_shim_remote_cocoa/
  3. browser/
  4. child/
  5. common/
  6. gpu/
  7. public/
  8. renderer/
  9. services/
  10. shell/
  11. test/
  12. utility/
  13. web_test/
  14. zygote/
  15. architecture.png
  16. BUILD.gn
  17. content_resources.grd
  18. DEPS
  19. DIR_METADATA
  20. OWNERS
  21. README.md
content/README.md

Content module

High-level overview

The “content” module is located insrc/content, and is the core code needed to render a page using a multi-process sandboxed browser. It includes all the web platform features (i.e. HTML5) and GPU acceleration. It does not include Chrome features, e.g. extensions/autofill/spelling etc.

Motivation

As the Chromium code has grown, features inevitably hooked into the wrong places, causing layering violations and dependencies that shouldn‘t exist. It’s been hard for developers to figure out what the “best” way is because the APIs (when they existed) and features were together in the same directory. To avoid this happening, and to add a clear separation between the core pieces of the code that render a page using a multi-process browser, consensus was reached to move the core Chrome code intosrc/content (content not chrome :) ).

content vs chrome

content should only contain code that is required to implement the web platform. Generally, a feature belongs in this category if and only if all of the following are true:

In contrast, many features that are common to modern web browsers do not satisfy these criteria and thus, are not implemented incontent. A non-exhaustive list:

  • Extensions
  • NaCl
  • SpellCheck
  • Autofill
  • Sync
  • Safe Browsing
  • Translate

Instead, these features are implemented inchrome, whilecontent only provides generic extension points that allow these features to subscribe to the events they require. Some features will require adding new extension points: for more information, seeHow to Add New Features (without bloating RenderView/RenderViewHost/WebContents).

Finally, there are a number of browser features that require interaction with online services supplied by the vendor, e.g. from the above list, Safe Browsing, Translate, Sync, and Autofill all require various network services to function. Thechrome layer is the natural place to encapsulate that vendor-specific integration behavior. For the rare cases where a web platform feature implemented incontent has a dependency on a network service (e.g. the network location service used by Geolocation),content should provide a way for the embedder to inject an endpoint (e.g.chrome might provide the service URL to use). Thecontent module itself must remain generic, with no hardcoded vendor-specific logic.

Architectural Diagram

Chrome browser depends on content, which as a whole depends on Chromium'slow-level libraries and on the constituent parts of//content.

See an older diagram at:https://www.chromium.org/developers/content-module.

The diagram illustrates the layering of the different modules. A module can include code directly from lower modules. However, a module can not include code from a module that is higher than it. This is enforced through DEPS rules. Modules can implement embedder APIs so that modules lower than them can call them. Examples of these APIs are the WebKit API and the Content API.

Content API

TheContent API is how code in content can indirectly call Chrome. Where possible, Chrome features try to hook in by filtering IPCs and listening to events perHow to Add New Features (without bloating RenderView/RenderViewHost/WebContents). When there isn't enough context (i.e. callback from WebKit) or when the callback is a one-off, we have aContentClient interface that the embedder (Chrome) implements.ContentClient is available in all processes. Some processes also have their own callback API as well, i.e.ContentBrowserClient/ContentRendererClient/ContentPluginClient.

Status and Roadmap

The current status iscontent doesn't depend on chrome at all (see the metabug and all bugs it depends on). We now have a basic browser built on top ofcontent (“content_shell”) that renders pages usingcontent on all platforms. This allow developers working on the web platform and core code to only have to build/test content, instead of all of chrome.

We have a separate target forcontent's unit tests incontent_unittests, and integration tests incontent_browsertests.

content is built as a separate dll to speed up the build.

We‘ve created an API aroundcontent, similar to our Blink API. This isolates embedders from content’s inner workings, and makes it clear to people working on content which methods are used by embedders.

Content OWNERS

Top-levelcontent OWNERS are reviewers who are qualified to review changes across all ofcontent and are responsible for its architecture. In general,content subdirectories will have specific owners who are the experts in reviewing that code, and top-level owners will defer to subdirectory owners as needed. For large architectural changes tocontent, all owners should loop incontent-owners@chromium.org to give others a chance to post suggestions. This applies to changes large enough to warrant a design doc.

To become a content/OWNER, candidates are expected to show substantial contributions tocontent in recent past that demonstrate knowledge of the core architecture and design principles, including both the browser process side and the renderer side. To become a top-level owner, please follow the following process:

  1. Become an owner in a fewcontent subdirectories and establish yourself as an expert reviewer in those areas.

  2. Find 1-2 current top-level owners who can become your “sponsors” for an owner nomination. Work with them to (1) review your technical changes incontent to gain trust in your technical work and (2) shadow-reviewcontent changes that you also review to gain trust in you as a reviewer. Once ready, your sponsors will nominate you for ownership by sending an email to the current top-level owners.

A typical nomination includes:

  • Projects that you worked on that involvedcontent, and which concepts they covered.
  • Some representative CLs contributed and/or reviewed. This can also include aggregate statistics, e.g. viagit shortlog -s --author=<username> content/browser.
  • Significant improvements to documentation of the above concepts

For reference, a top-levelcontent OWNER is expected to be familiar with most (but not necessarily all) of the following core parts ofcontent:

  • Navigation
  • Process model
  • Session history
  • Loading, interactions with the network stack
  • Manipulating pages, documents, frames, and frame trees.
  • MPArch concepts like inner FrameTrees, primary vs non-primary pages.
  • Howcontent interacts with compositing and input handling.
  • Mojo interfaces betweencontent/browser andcontent/renderer and/orblink/renderer.
  • Security checks (e.g.,ChildProcessSecurityPolicy).
  • content/public APIs: rules for adding them, common APIs likeWebContentsObserver,ContentBrowserClient, andNavigationThrottle.
  • Know that there arecontent embedders beyond //chrome (e.g., Android Webview).
  • DEPS rules, what should and should not depend on //content.

Correspondingly, a top-levelcontent OWNER is typically familiar with most of the following corecontent classes:

  • Render(Frame|FrameProxy|Process|Widget|View)Host
  • Render(Frame|Widget|Thread)
  • WebContents andWebContentsObserver
  • FrameTree andFrameTreeNode
  • RenderFrameHostManager
  • NavigationHandle andNavigationRequest, their ownership and lifetime
  • Page vsRenderFrameHost vs blink'sDocument,RenderDocumentHostUserData/NavigationHandleUserData, and associated lifetime issues.
  • SiteInstance andBrowsingInstance,SiteInfo
  • NavigationController,NavigationEntry vsFrameNavigationEntry
  • ChildProcessSecurityPolicy
  • BrowserContext,StoragePartition
  • ContentBrowserClient

Further documentation


[8]ページ先頭

©2009-2025 Movatter.jp