# src/content is a large and complex component. In general, files should be in
# subdirectories that have specific owners who are the experts in reviewing that
# code. Top level content/OWNERS are reviewers who are qualified to review
# changes across all of content and are responsible for its architecture. They
# will defer to subdirectory owners as needed. As such we expect that a
# content/OWNER has made substantial contributions to content/ in the recent
# past, specifically both in the browser and renderer subdirectories as they
# encapsulate the main architecture, and demonstrated overall knowledge of the
# content architecture by doing code reviews for changes that affect different
# parts of content even before being a content/OWNER.
#
# For public questions directed to OWNERS, you can send email
# to content-owners@chromium.org.

alexmos@chromium.org
avi@chromium.org
clamy@chromium.org
creis@chromium.org
dgozman@chromium.org
falken@chromium.org
jam@chromium.org
jochen@chromium.org
kinuko@chromium.org
nasko@chromium.org
pfeldman@chromium.org

# per-file rules:
# These are for the common case of adding or renaming files. If you're doing
# structural changes, please get a review from a reviewer in this file.
per-file BUILD.gn=*

# For threading (BrowserThread, BrowserMainLoop, ThreadPool, etc.)
per-file *browser_main_loop*=gab@chromium.org
per-file *browser_task_environment*=gab@chromium.org
per-file *browser_thread*=gab@chromium.org

# For Fuchsia-specific changes:
per-file *_fuchsia*=file://build/fuchsia/OWNERS

# For Mac-specific changes:
per-file *_mac.*=ellyjones@chromium.org
per-file *_mac.*=mark@chromium.org
per-file *_mac.*=rsesek@chromium.org
per-file *_mac.*=tapted@chromium.org
per-file *_mac_*=ellyjones@chromium.org
per-file *_mac_*=mark@chromium.org
per-file *_mac_*=rsesek@chromium.org
per-file *_mac_*=tapted@chromium.org
per-file *.mm=ellyjones@chromium.org
per-file *.mm=mark@chromium.org
per-file *.mm=rsesek@chromium.org
per-file *.mm=tapted@chromium.org

# Translation artifacts:
per-file *.xtb=file://tools/translation/TRANSLATION_OWNERS

# COMPONENT: Internals>Core
