This directory is for components that have the Content Module as the uppermost layer they depend on. They may depend only on the Content API (content/public) and on lower layers (e.g. base/, net/, ipc/ etc.). Components that have bits of code that need to live in different processes (e.g. some code in the browser process, some in the renderer process, etc.) should separate the code into different subdirectories. Hence for a component named 'foo' you might end up with a structure like the following: components/foo - DEPS, OWNERS, foo.gypi components/foo/browser - code that needs the browser process components/foo/common - for e.g. IPC constants and such components/foo/renderer - code that needs renderer process These subdirectories should have DEPS files with the relevant restrictions in place, i.e. only components/*/browser should be allowed to #include from content/public/browser. Note that there may also be an 'android' subdir, with a Java source code structure underneath it where the package name is org.chromium.components.foo, and with subdirs after 'foo' to illustrate process, e.g. 'browser' or 'renderer': components/foo/android/OWNERS, DEPS components/foo/android/java/src/org/chromium/components/foo/browser/ components/foo/android/javatests/src/org/chromium/components/foo/browser/ Code in a component should be placed in a namespace corresponding to the name of the component; e.g. for a component living in //components/foo, code in that component should be in the foo:: namespace. Note that it used to be the rule that all code under //components should be in the components:: namespace; this is being phased out.