This directory is for features that are intended for reuse across multiple
embedders (e.g., Android WebView and Chrome).

By default, subdirectories have the Content Module as the uppermost layer they
depend on, i.e., they may depend only on the Content API (content/public) and
on lower layers (e.g. base/, net/, ipc/ etc.). Individual subdirectories may
further restrict their dependencies, e.g., a component that is used by Chrome
for iOS (which does not use the content API) will either disallow usage of
content/public or be in the form of a layered component
(http://www.chromium.org/developers/design-documents/layered-components-design).

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.
